#ifndef _AUDIO_SOURCE_H
#define _AUDIO_SOURCE_H

#include <string>

typedef enum 
{
    MUSIC,
    EFFECT
} AudioType;

/*!
 * \class AudioSource
 * \brief 
 */
class AudioSource
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    std::string sourceName;
    std::string audioFile;
    AudioType audioType;
    bool loop;
    float volume;
    bool mute;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    AudioSource(const std::string &name, const AudioType &t);
    virtual ~AudioSource(void);

    // Others
    void initialize(void) throw(...);
    void play(void) throw(...);
    void stop(void) throw(...);
    void pause(void) throw(...);

    // Getters
    const AudioType& getAudioType(void) const;
    const float getVolume(void) const;
    const bool getMute(void) const;
    const bool isPlaying(void) const;

    // Setters
    void setAudioFile(const std::string &file);
    void setLoop(const bool l);
    void setVolume(const float vol);
    void setMute(const bool m);

};

#endif
